{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# GACNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>best_pop</th>\n",
       "      <th>best_loss</th>\n",
       "      <th>best_acc</th>\n",
       "      <th>avg_fitness</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3024</td>\n",
       "      <td>0.1204</td>\n",
       "      <td>0.0958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3023</td>\n",
       "      <td>0.1270</td>\n",
       "      <td>0.0976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3025</td>\n",
       "      <td>0.1244</td>\n",
       "      <td>0.0966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3019</td>\n",
       "      <td>0.1182</td>\n",
       "      <td>0.0989</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3025</td>\n",
       "      <td>0.1212</td>\n",
       "      <td>0.0978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3026</td>\n",
       "      <td>0.1184</td>\n",
       "      <td>0.0990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3029</td>\n",
       "      <td>0.1184</td>\n",
       "      <td>0.1004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3027</td>\n",
       "      <td>0.1170</td>\n",
       "      <td>0.0991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>3.0</td>\n",
       "      <td>2.3024</td>\n",
       "      <td>0.1184</td>\n",
       "      <td>0.0993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>15.0</td>\n",
       "      <td>2.3027</td>\n",
       "      <td>0.1194</td>\n",
       "      <td>0.1003</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    best_pop  best_loss  best_acc  avg_fitness\n",
       "1       15.0     2.3024    0.1204       0.0958\n",
       "2       15.0     2.3023    0.1270       0.0976\n",
       "3       15.0     2.3025    0.1244       0.0966\n",
       "4       15.0     2.3019    0.1182       0.0989\n",
       "5       15.0     2.3025    0.1212       0.0978\n",
       "6       15.0     2.3026    0.1184       0.0990\n",
       "7       15.0     2.3029    0.1184       0.1004\n",
       "8       15.0     2.3027    0.1170       0.0991\n",
       "9        3.0     2.3024    0.1184       0.0993\n",
       "10      15.0     2.3027    0.1194       0.1003"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with open('D:\\Programs\\PycharmProjects\\GACNN\\SteadyStateGA_CIFAR10.txt', 'r') as f:\n",
    "    text = f.readlines()\n",
    "    cols = text[0].strip().split('\\t')\n",
    "    data = []\n",
    "    for row in text[1:]:\n",
    "        data.append(list(map(float, row.strip().split('\\t'))))\n",
    "        \n",
    "df = pd.DataFrame(data, columns=cols)\n",
    "df.index = list(map(int, df['iter']))\n",
    "del df['iter']\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'iter')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[['best_acc']].plot(title='SteadyStateGA-CIFAR10')\n",
    "plt.xlabel('iter')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# AdamCNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>val_loss</th>\n",
       "      <th>val_accuracy</th>\n",
       "      <th>loss</th>\n",
       "      <th>accuracy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.9559</td>\n",
       "      <td>0.6797</td>\n",
       "      <td>1.1671</td>\n",
       "      <td>0.6082</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.9014</td>\n",
       "      <td>0.6958</td>\n",
       "      <td>0.9316</td>\n",
       "      <td>0.6888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.8484</td>\n",
       "      <td>0.7153</td>\n",
       "      <td>0.8805</td>\n",
       "      <td>0.7022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.8295</td>\n",
       "      <td>0.7192</td>\n",
       "      <td>0.8468</td>\n",
       "      <td>0.7150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.8199</td>\n",
       "      <td>0.7141</td>\n",
       "      <td>0.8244</td>\n",
       "      <td>0.7201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.8022</td>\n",
       "      <td>0.7309</td>\n",
       "      <td>0.8076</td>\n",
       "      <td>0.7274</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.7976</td>\n",
       "      <td>0.7224</td>\n",
       "      <td>0.7936</td>\n",
       "      <td>0.7306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.7664</td>\n",
       "      <td>0.7401</td>\n",
       "      <td>0.7842</td>\n",
       "      <td>0.7326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.7810</td>\n",
       "      <td>0.7282</td>\n",
       "      <td>0.7734</td>\n",
       "      <td>0.7355</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.7708</td>\n",
       "      <td>0.7385</td>\n",
       "      <td>0.7677</td>\n",
       "      <td>0.7371</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    val_loss  val_accuracy    loss  accuracy\n",
       "1     0.9559        0.6797  1.1671    0.6082\n",
       "2     0.9014        0.6958  0.9316    0.6888\n",
       "3     0.8484        0.7153  0.8805    0.7022\n",
       "4     0.8295        0.7192  0.8468    0.7150\n",
       "5     0.8199        0.7141  0.8244    0.7201\n",
       "6     0.8022        0.7309  0.8076    0.7274\n",
       "7     0.7976        0.7224  0.7936    0.7306\n",
       "8     0.7664        0.7401  0.7842    0.7326\n",
       "9     0.7810        0.7282  0.7734    0.7355\n",
       "10    0.7708        0.7385  0.7677    0.7371"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with open('GDCNN_MNIST.txt', 'r') as f:\n",
    "    text = f.readlines()\n",
    "    cols = text[0].strip().split('\\t')\n",
    "    data = []\n",
    "    for row in text[1:]:\n",
    "        data.append(list(map(float, row.strip().split('\\t'))))\n",
    "\n",
    "df = pd.DataFrame(data, columns=cols)\n",
    "df.index += 1\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'epoch')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[['loss', 'val_loss']].plot(title='AdamCNN-MNIST-LOSS')\n",
    "plt.xlabel('epoch')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
